package com.play2gether;

import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Raul on 21/05/14.
 */
//public class consultarVinculacionActivity extends ActionBarActivity implements View.OnClickListener{
public class consultarVinculacionActivity extends ActionBarActivity implements View.OnClickListener{


    public  Button             btCancelarVinc;
    public TextView txtCorreo;
    public  TextView           txtVinc;
    public TextView txtInfo;

    public String email;
    public int accion;
    private DataBaseManager    db;
    public String id;
    private int envioMail;
    private String tipo; //1: Cancelar peticion  2: Cancelar vinculación

    public String[] estado;
    private String url;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.consultar_vinculacion);

        //Clase para la base de datos
        db = new DataBaseManager(this);

        Bundle bundle = getIntent().getExtras();
        tipo = bundle.getString("tipo");
        id = bundle.getString("id");
        estado = bundle.getStringArray("estado");

        configurarVista();
        configurarNavbar();
    }
    public void configurarVista(){
        btCancelarVinc = (Button) findViewById(R.id.btCancelarInvitacion);
        txtCorreo = (TextView) findViewById(R.id.inputCorreo);
        txtVinc = (TextView) findViewById(R.id.textoVinc);
        txtInfo = (TextView) findViewById(R.id.textoInf);
        btCancelarVinc.setOnClickListener(this);

        if (tipo.equals("1")) { txtVinc.setText("Has solicitado vincularte con el correo:");
            txtInfo.setText("Si quieres cancelar la petición, pulsa el siguiente botón");
            btCancelarVinc.setText("Cancelar Petición");
        }
        else if (tipo.equals("2")) { txtVinc.setText("Estás vinculado al correo: ");
            txtInfo.setText("Si quieres cancelar la vinculación, pulsa el siguiente botón");
            btCancelarVinc.setText("Desvincular");
        }

        email = db.obtenerEmailPareja(id);

        txtCorreo.setText(email);
        txtCorreo.setEnabled(false);
    }
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void configurarNavbar() {
        android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        Button btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        Button btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        Button btOpcionesNV = (Button) findViewById(R.id.btOpcionesNV);
        Button btLogoNV = (Button) findViewById(R.id.btLogoNV);
        Button btAtras = (Button) findViewById(R.id.bt_atras);
        Button btSincronizar = (Button) findViewById(R.id.bt_sincronizar);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        if (tipo.equals("1")) { tituloNav.setText("Datos Petición"); }
        else if (tipo.equals("2")) { tituloNav.setText("Datos Vinculo"); }

        //Botones para el navbar
        btOpcionesNV.setOnClickListener(this);
        if (!estado[0].equals("2")) {
            btFormularioNV.setAlpha(0);
            btSugerenciaNV.setAlpha(0);
            btSincronizar.setAlpha(0);
        } else {
            btFormularioNV.setOnClickListener(this);
            btSugerenciaNV.setOnClickListener(this);
        }
            btLogoNV.setOnClickListener(this);
            btAtras.setOnClickListener(this);
            btSincronizar.setOnClickListener(this);
            //btAtras.setAlpha(0);
            //btSincronizar.setAlpha(0);
            //btOpcionesNV.setAlpha(0);

        boolean haySugerencias = db.comprobarSugerencias(id);
        if (haySugerencias){ btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencias_notificacion)); }
        else { btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencia_nav)); }

        boolean hayFormularios = db.comprobarFormularios(id);
        if (hayFormularios){ btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_notificacion)); }
        else { btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_nav)); }
    }
    @Override
    public void onClick(View v) {
        Intent intent;
        intent = new Intent();

        switch (v.getId()) {
            case R.id.btCancelarInvitacion:
                 mostrarAlerta();
                 break;
            //Botones para el natvar
            case R.id.btFormularioNV:
                intent.setClass(this,indexFormularios.class);
                intent.putExtra("id",id);
                intent.putExtra("estado",estado);
                finish();
                startActivity(intent);
                break;
            case R.id.btSugerenciaNV:
                intent.setClass(this,indexSugerencias.class);
                intent.putExtra("id",id);
                intent.putExtra("estado",estado);
                finish();
                startActivity(intent);
                break;
            case R.id.btOpcionesNV:
                intent.setClass(this,menuActivity.class);
                intent.putExtra("id",id);
                intent.putExtra("estado",estado);
                finish();
                startActivity(intent);
                break;
            case R.id.bt_atras:
                finish();
                break;
            case R.id.btLogoNV:
                finish();
                break;
            case R.id.bt_sincronizar:
                sincronizar();
                break;
        }
    }

    public void mostrarAlerta(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(consultarVinculacionActivity.this);

        if (tipo.equals("1")) {
            alertDialog.setTitle("Cancelar Petición");
            alertDialog.setMessage("¿Está seguro que quieres cancelar la petición?");

            alertDialog.setPositiveButton("ACEPTAR",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            try {
                                //new cancelarPeticion().execute();
                            } catch (Exception e) {
                                e.printStackTrace();
                                Log.e("ERROR", e.getMessage());
                            }
                        }
                    }
            );
            alertDialog.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });

            alertDialog.show();
        }
        else if (tipo.equals("2")){
            alertDialog.setTitle("Cancelar vinculación");
            alertDialog.setMessage("¿Está seguro que quieres cancelar la vinculación?");

            alertDialog.setPositiveButton("ACEPTAR",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/vincular";
                            try {
                                new cancelarVinculacion().execute();
                            } catch (Exception e) {
                                e.printStackTrace();
                                Log.e("ERROR", e.getMessage());
                            }
                        }
                    }
            );
            alertDialog.setNegativeButton("VOLVER", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });

            alertDialog.show();
        }
    }


    public class cancelarPeticion extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(),"Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected  JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/cancelar_vinculacion";

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}

            //return json;
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){ id = (String) json.get("id_usuario"); } //Si no salta a la excepción
                asunto = (String) json.get("asunto");
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),"No se ha cancelado la petición. Inténtalo otra vez!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }

            if (estado.equals("ok")){ Toast.makeText(getApplicationContext(),"Has cancelado la petición!!", Toast.LENGTH_SHORT).show();
                db.cambiarEstadoUsuario(id, 0);
                Intent intent  = new Intent(consultarVinculacionActivity.this,principalActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
            else                    { Toast.makeText(getApplicationContext(),asunto, Toast.LENGTH_SHORT).show(); }
        }

    }

    public class cancelarVinculacion extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(),"Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected  JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/cancelar_vinculacion";

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}

            //return json;
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")) {  //Si no salta a la excepción
                    asunto = (String) json.get("asunto");
                    db.cambiarEstadoUsuario(id, 0);
                    db.borrarApodo(id);
                    mostrarAlerta2();
                }
                else { Toast.makeText(getApplicationContext(),asunto, Toast.LENGTH_SHORT).show(); }
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),"No se ha cancelado la vinculación. Inténtalo otra vez!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    private void mostrarAlerta2(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(consultarVinculacionActivity.this);
        alertDialog.setMessage("Te has desvinculado de tu pareja");

        alertDialog.setPositiveButton("VOLVER",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent  = new Intent(consultarVinculacionActivity.this,principalActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(intent);
                    }
                });
        alertDialog.show();

    }
    public void sincronizar(){
        Sincronizar sinc = new Sincronizar(id,this);
        sinc.sincronizar();

    };




}

